package com.sky.config;

import com.alibaba.fastjson.support.spring.FastJsonRedisSerializer;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;

/**
 * Redis配置类
 *

 */
@Configuration
@Slf4j
public class RedisConfiguration {


    @Bean// 创建RedisTemplate对象
    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){

        /**
         * 当前配置类不是必须的，因为 Spring Boot 框架会自动装配 RedisTemplate 对象，但是默认的key序列化器为
         *
         * JdkSerializationRedisSerializer，导致我们存到Redis中后的数据和原始数据有差别，故设置为StringRedisSerializer序列化器。
         *
         * RedisTemplate默认使用JDK的序列化机制，因此从程序中输入的字符串经过序列化看起来像是乱码；而StringRedisTemplate使用了String的序列化机制，因此有一种所见即所得的效果。
         */
        log.info("开始创建redis模版对象");

        RedisTemplate redisTemplate = new RedisTemplate();// 创建RedisTemplate对象
        //设置redis key value 的序列化容器
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        //value值支持中文显示
        redisTemplate.setValueSerializer(new FastJsonRedisSerializer<Object>(Object.class));
        //设置redis的连接工厂对象
        redisTemplate.setConnectionFactory(redisConnectionFactory);

        return redisTemplate;

    }

}
